Testování hypotéz

Neyman-Pearsonův test

literatura: Barlow sec. 8.1.5
James sec. 9.2.4

existuje pouze pro kompletně specifikované alternativní hypotézy; např. soubor sestává ze 2 druhů materiálu

vybereme oblast, kde $P_A(x)/P_H(x)>c$ pro nějaké předem zvolené $c$.

Pro 2 hypotézy s gaussovským rozdělením, stejným rozptylem (dominuje nejistota měřícího přístroje) a rozdílnými středními hodnotami $m_1$ a $m_2$ je poměr roven $$\exp((m_1-m_2)(m_1+m_2-2x)/2\sigma^2)>c$$ lze tedy jednoduše najít hranici oddělující obě hypotézy


In [8]:
%pylab inline
p=0.5
n=15
sig=0.1
x=r_[:n+1]
from scipy.misc import comb
w=pow(1-p,x)*pow(p,n-x)*comb(n,x)
bar(x,w)


Populating the interactive namespace from numpy and matplotlib
Out[8]:
<Container object of 16 artists>

Testujeme binomické rozdělení - zda mince dává oba možné výsledky se stejnou pravděpodobností..

Nulová hypotéza: p=0.5. Kolik hodů z n=15 může vyjít stejně, aby nebyla zamítnuta na hlad. významnosti sig=10%?


In [2]:
cumw=cumsum(w)
sel=cumw>1-sig
bar(x[sel],w[sel],fc='red')
bar(x[sel==False],w[sel==False],fc='blue')
title("jednostranny(one-tailed)")


Out[2]:
<matplotlib.text.Text at 0x2da9c90>

In [3]:
dw=w[:n//2]+w[n-1:n//2:-1]
cumdw=cumsum(dw)
sel[:]=False
sel[:n//2][cumdw<sig]=True
print sel[n-1:n//2:-1].shape,cumdw.shape
sel[n-1:n//2:-1][cumdw<sig]=True
bar(x[sel],w[sel],fc='red')
bar(x[sel==False],w[sel==False],fc='blue')
title("dvoustranny(two-tailed)")


(7,) (7,)
Out[3]:
<matplotlib.text.Text at 0x2ff2c50>

In [4]:
sel[n-1:n//2:-1][cumdw>sig]


Out[4]:
array([False, False, False], dtype=bool)

Typická otázka: kolik měření je třeba provést k dosažení požadované významnosti testu? (Barlow, str. 148)

Příklad

Zkoumáme vliv aplikace nějakého postupu (léčení, opracování) a úspěšný výsledek (uzdravený pacient, funkční výrobek). Mějme 2 hypotézy - nulová $H_0$, že aplikace nemá žádný vliv - úspěšnost zůstane v průměru stejná (rovna $p_0$) a alternativní $H_1$, že se úspěšnost zvýší na $p_1$

Požadujme hladinu významnosti testu ($\alpha$) 5% a 99% sílu testu ($1-\beta$); pro jednostranný test norm. rozdělení 5% hranice odpovídá 1.64$\sigma$, 1% hladina významnosti odpovídá 2,33$\sigma$.

Binomická rozdělení pro obě hypotézy aproximujeme normálním rozdělením $N(\mu=N p,\sigma^2=N p(1-p))$. Aby bylo možné sestrojit test splňující obě kritéria, musí být $p_0 N + 1.64\sqrt{p_0 (1-p_0) N} < p_1 N - 2.33\sqrt{p_1 (1-p_1) N}$


In [20]:
p_0=0.6
p_1=0.7
N=100
plot(x,stats.norm(p_0,sqrt(p_0*(1-p_0)/N)).pdf(x))
plot(x,stats.norm(p_1,sqrt(p_1*(1-p_1)/N)).pdf(x))
axvline(p_0+sqrt(p_0*(1-p_0)/N)*1.64,color='b')
axvline(p_1-sqrt(p_1*(1-p_1)/N)*2.33,color='g')


Out[20]:
<matplotlib.lines.Line2D at 0x48b7d50>

In [21]:
N=351
p_0=0.6
p_1=0.7
p_0*N + 1.64*sqrt(p_0*(1-p_0)*N)
x=r_[.30:.90:0.007]
from scipy import stats
plot(x,stats.norm(p_0,sqrt(p_0*(1-p_0)/N)).pdf(x))
plot(x,stats.norm(p_1,sqrt(p_1*(1-p_1)/N)).pdf(x))
axvline(p_0+sqrt(p_0*(1-p_0)/N)*1.64,color='b')
axvline(p_1-sqrt(p_1*(1-p_1)/N)*2.33,color='g')


Out[21]:
<matplotlib.lines.Line2D at 0x49ba450>

při počtu 351 pokusů obě meze splynou